package cn.cj.erp.bo.system;

import cn.cj.erp.common.SearchParam;
import cn.cj.erp.common.annotation.Search;
import cn.cj.erp.common.enums.SearchType;
import cn.cj.erp.common.enums.DataScopeTypeEnum;
import cn.cj.erp.common.excel.anno.Excel;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Data;
import lombok.EqualsAndHashCode;

import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
import java.util.Set;

/**
 * 角色
 * @author chenjian
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class SysRoleBo extends SearchParam {

    /** 角色ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long roleId;

    /** 角色名称 */
    @Excel(name = "角色名称")
    @NotBlank(message = "角色名称不能为空")
    @Search(type = SearchType.LIKE)
    private String roleName;

    /** 角色key */
    @Excel(name = "角色权限")
    @NotBlank(message = "角色权限不能为空")
    @Search(type = SearchType.LIKE)
    private String roleKey;

    /** 角色名称和角色key(仅搜索用) */
    @Search(type = SearchType.APPLY, apply = "(role_name like %{}% or role_key like %{}%)")
    private String roleNameKey;

    /** 数据范围 */
    @Excel(name = "数据范围")
    private DataScopeTypeEnum dataScope;

    /** 备注 */
    @Excel(name = "备注")
    private String remark;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date createTime;

    /** 菜单组 */
    private List<Long> menuIds;

    /** 部门组（数据权限） */
    private List<Long> deptIds;

    /** 角色菜单权限 */
    private Set<String> permissions;

    /** 处理方式：add新增、edit修改、delete删除 */
    private String handleType;
}
